package com.company.mtp.device.api;

import java.util.List;
import java.util.Map;

/**
 * 设备管理接口
 * 定义设备管理的核心功能，支持可插拔设计
 * 
 * @author mtp
 */
public interface DeviceManager {
    
    /**
     * 获取设备管理器名称
     * 
     * @return 设备管理器名称
     */
    String getName();
    
    /**
     * 获取设备管理器版本
     * 
     * @return 设备管理器版本
     */
    String getVersion();
    
    /**
     * 获取支持的设备类型
     * 
     * @return 支持的设备类型列表
     */
    List<String> getSupportedDeviceTypes();
    
    /**
     * 初始化设备管理器
     * 
     * @param config 配置参数
     */
    void initialize(Map<String, Object> config);
    
    /**
     * 获取所有可用设备
     * 
     * @return 设备列表
     */
    List<Device> getAllDevices();
    
    /**
     * 获取指定类型的可用设备
     * 
     * @param deviceType 设备类型
     * @return 设备列表
     */
    List<Device> getDevicesByType(String deviceType);
    
    /**
     * 获取指定ID的设备
     * 
     * @param deviceId 设备ID
     * @return 设备对象，如果不存在则返回null
     */
    Device getDeviceById(String deviceId);
    
    /**
     * 预约设备
     * 
     * @param deviceId 设备ID
     * @param userId 用户ID
     * @param duration 预约时长（分钟）
     * @return 预约结果
     */
    ReservationResult reserveDevice(String deviceId, String userId, int duration);
    
    /**
     * 释放设备
     * 
     * @param deviceId 设备ID
     * @param userId 用户ID
     * @return 是否成功释放
     */
    boolean releaseDevice(String deviceId, String userId);
    
    /**
     * 获取设备状态
     * 
     * @param deviceId 设备ID
     * @return 设备状态
     */
    DeviceStatus getDeviceStatus(String deviceId);
    
    /**
     * 安装应用到设备
     * 
     * @param deviceId 设备ID
     * @param appPath 应用路径
     * @return 安装结果
     */
    InstallationResult installApp(String deviceId, String appPath);
    
    /**
     * 卸载应用
     * 
     * @param deviceId 设备ID
     * @param packageName 应用包名
     * @return 是否成功卸载
     */
    boolean uninstallApp(String deviceId, String packageName);
    
    /**
     * 重启设备
     * 
     * @param deviceId 设备ID
     * @return 是否成功重启
     */
    boolean rebootDevice(String deviceId);
    
    /**
     * 获取设备日志
     * 
     * @param deviceId 设备ID
     * @param lines 日志行数
     * @return 设备日志
     */
    List<String> getDeviceLogs(String deviceId, int lines);
    
    /**
     * 关闭设备管理器
     */
    void shutdown();
}